#include "buzzer.h"
/**
 * @brief 温度过高报警
 *
 */
void temp_high_Worrning(void)
{
    OLED_Clear();
    OLED_ShowString(0, 0, "Temp High!", OLED_8X16);
    OLED_Update();
    HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
    vTaskDelay(100);
    HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
}
/**
 * @brief 电池电量低报警
 *
 */
void battery_low_Worrning(void)
{
    OLED_Clear();
    OLED_ShowString(0, 0, "Battery Low!", OLED_8X16);
    OLED_Update();
    HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
    vTaskDelay(100);
    HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
    vTaskDelay(100);
    HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
    vTaskDelay(100);
    HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
    vTaskDelay(100);
    HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
    vTaskDelay(100);
    HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
}
/**
 * @brief 停止报警
 *
 */
void buzzer_stop(void)
{
    HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
}

void buzzer_task(void *arg)
{
    EventBits_t event_bits;
    while (1)
    {
        event_bits = xEventGroupWaitBits(status_event_group, BATTERY_LOW_EVENT | IC_HIGH_TEMP_EVENT, pdFALSE, pdFALSE, 100);
        if (event_bits & BATTERY_LOW_EVENT)
        {
            debug_printf("!!!!!!!!!!!!!!!!!!bat low!!!!!!!!!!!!!!!!!!\r\n");
            battery_low_Worrning();
        }
        if (event_bits & IC_HIGH_TEMP_EVENT)
        {
            debug_printf("!!!!!!!!!!!!!!!!ic_temp high!!!!!!!!!!!!!!!!!!\r\n");
            temp_high_Worrning();
        }
        if (!(event_bits & BATTERY_LOW_EVENT) && !(event_bits & IC_HIGH_TEMP_EVENT))
        {
            buzzer_stop();
            OLED_ClearArea(0, 0, 128, 16);
        }
    }
}
